/**
 * 2012-2-20
 * @author 李亚松
 * @email  lysong01@gmail.com
 * Math.java
 */
package liyasong.math;

import java.util.ArrayList;
import java.util.Collection;

public class Math {
	/**
	 * @param n 一个自然数
	 * @return	n以内的奇数数组
	 * int[]
	 */
	public static int[] odd(int n) {
		int[] array = new int[(n+1)/2];
		for (int i = 0; i < (n+1)/2; i++) {
			array[i] = 2*i+1;
		}
		return array;
	}
	
	
	/**
	 * @param n 一个自然数
	 * @return	n以内的偶数数组
	 * int[]
	 */
	public static int[] even(int n) {
		int[] array = new int[(n+1)/2];
		for (int i = 0; i < (n+1)/2; i++) {
			array[i] = 2*(i+1);
		}
		return array;
	}
	
	public static boolean isPrime(int n) {
		if (n < 0) {
			throw new IllegalArgumentException();
		} else if (n==2 || n==3) {
			return true;
		} else if((n+1)%6 !=0 && (n-1)%6!=0){
			return false;
		} else {
			for (int i = 3; i <= java.lang.Math.sqrt(n); i+=2) {
				if (n%i == 0) {
					return false;
				}
			}
			return true; 	
		}
	}
	
	public static Integer[] primes(int n) {	//这里到底要不要抛出异常呢？
		if (n < 1) {
			throw new IllegalArgumentException();
		} else {
			Collection<Integer> col = new ArrayList<Integer>();
			col.add(2);
			col.add(3);
			for (int i = 1; 6*i-1<=n; i++) {	//这里的筛选有更好的书写方式吗？
				if (isPrime(6*i-1)) {
					col.add(6*i-1);
				}
				if (6*i+1<=n && isPrime(6*i+1)) {
					col.add(6*i+1);
				}
			}
			return col.toArray(new Integer[col.size()]);
		}
	}
}
